package edu.client;

import com.google.gwt.user.client.ui.TabPanel;
import edu.shared.DTO.ComponentePatronDTO;
import edu.shared.DTO.EquipoPatronDTO;
import edu.shared.DTO.ProductoDTO;

public class Validaciones {

	public Validaciones() {

	}

	public boolean textBoxVacio(String texto) {

		if (texto.length() == 0)
			return true;
		else
			return false;
	}

	public boolean textBoxSoloLetras(String texto) {

		boolean result = true;

		for (int i = 0; i < texto.length(); i++) {

			if (Character.isDigit(texto.charAt(i))) {
				result = false;
				break;
			}
		}
		return result;

	}

	public boolean textBoxSoloNumeros(String texto) {

		boolean result = true;
		if (texto.length() > 0) {
			for (int i = 0; i < texto.length(); i++) {

				if (Character.isLetter(texto.charAt(i))) {
					result = false;
					break;
				}
			}
		} else
			result = false;
		return result;

	}

	public boolean textBoxSoloNumerosEnterosOFloats(String texto) {

		boolean result = true;
		if (texto.length() > 0) {
			for (int i = 0; i < texto.length(); i++) {

				if (Character.isLetter(texto.charAt(i)) && texto.charAt(i) != '.') {
					result = false;
					break;
				}
			}
		} else
			result = false;
		return result;

	}
	
	/**
	 * Método que busca la pestaña con el nombre especificado.
	 * @param titulo. Título asignado a la pestaña.
	 * @return. TabPanel: si encuenta una pestaña con el nombre especificado.
	 * 			-1: si no encuentra una pestaña con el nombre especificado.
	 */
	public static int numeroElemento(TabPanel panel, String titulo) {

		int elemento = -1;
		int contador = 0;

		while (elemento == -1 && contador < panel.getWidgetCount()) {

			if (panel.getWidget(contador).getTitle().compareTo(titulo) == 0)
				elemento = contador;
			else
				contador++;
		}

		return elemento;
	}
	
	/**
	 * Método que rellena el código de equipo patrón para mostrarlo como corresponde en la pantalla: CCSS-VV-ccss-PP.
	 * Siendo C = número clase, S = número subclase, V = número versión, c = número componente, s = número subcomponente, P = número plano.
	 * @param equipoPatronDTO
	 * @return String con el código formateado de un equipo patrón para mostrar en pantalla.
	 */
	public static String rellenarCodigoEquipoPatron(EquipoPatronDTO equipoPatronDTO) {
		
		String codigoEquipoPatronDTO;
		
		//Comprobación del código de clase.
		if (String.valueOf(equipoPatronDTO.getCodigoClase()).length() < 2)
			codigoEquipoPatronDTO = "0" + equipoPatronDTO.getCodigoClase();
		else
			codigoEquipoPatronDTO = "" + equipoPatronDTO.getCodigoClase();
		
		//Comprobación del código de subclase.
		if (String.valueOf(equipoPatronDTO.getCodigoSubclase()).length() < 2)
			codigoEquipoPatronDTO = codigoEquipoPatronDTO.concat("0" + equipoPatronDTO.getCodigoSubclase());
		else
			codigoEquipoPatronDTO = codigoEquipoPatronDTO.concat("" + equipoPatronDTO.getCodigoSubclase());
		
		//Agrega la versión.
		codigoEquipoPatronDTO = codigoEquipoPatronDTO.concat("-" + equipoPatronDTO.getNroVersion());
		
		//Agrega los campos componente y subcomponente, que son O para un equipo patrón.
		codigoEquipoPatronDTO = codigoEquipoPatronDTO.concat("-0000-");
		
		//Comprobación del código de plano.
		if (String.valueOf(equipoPatronDTO.getPlano()).length() < 2)
			codigoEquipoPatronDTO = codigoEquipoPatronDTO.concat("0" + equipoPatronDTO.getPlano());
		else
			codigoEquipoPatronDTO = codigoEquipoPatronDTO.concat("" + equipoPatronDTO.getPlano());
		
		return codigoEquipoPatronDTO;
	}
	
	/**
	 * Método que comprueba si se tiene un cero adelante para los códigos de un dígito.
	 */
	public static String rellenarCodigo(int codigo) {
		
		String codigoRelleno;
		
		//Comprobación del código.
		if (String.valueOf(codigo).length() < 2)
			codigoRelleno = "0" + codigo;
		else
			codigoRelleno = "" + codigo;
		
		return codigoRelleno;
	}
	
	/**
	 * Método que rellena el código de componente patrón para mostrarlo como corresponde en la pantalla: CCSS-VV-ccss-PP.
	 * Siendo C = número clase, S = número subclase, V = número versión, c = número componente, s = número subcomponente, P = número plano.
	 * @param componentePatronDTO
	 * @return String con el código formateado de un componente patrón para mostrar en pantalla.
	 */
	public static String rellenarCodigoComponentePatron(ComponentePatronDTO componentePatronDTO) {
		
		String codigoComponentePatronDTO;
		
		//Comprobación del código de clase.
		if (String.valueOf(componentePatronDTO.getCodigoClase()).length() < 2)
			codigoComponentePatronDTO = "0" + componentePatronDTO.getCodigoClase();
		else
			codigoComponentePatronDTO = "" + componentePatronDTO.getCodigoClase();
		
		//Comprobación del código de subclase.
		if (String.valueOf(componentePatronDTO.getCodigoSubclase()).length() < 2)
			codigoComponentePatronDTO = codigoComponentePatronDTO.concat("0" + componentePatronDTO.getCodigoSubclase());
		else
			codigoComponentePatronDTO = codigoComponentePatronDTO.concat("" + componentePatronDTO.getCodigoSubclase());
		
		//Agrega la versión.
		codigoComponentePatronDTO = codigoComponentePatronDTO.concat("-" + componentePatronDTO.getNroVersion() + "-");
		
		//Agrega el código de componente.
		if (String.valueOf(componentePatronDTO.getCodigoComponente()).length() < 2)
			codigoComponentePatronDTO = codigoComponentePatronDTO.concat("0" + componentePatronDTO.getCodigoComponente());
		else
			codigoComponentePatronDTO = codigoComponentePatronDTO.concat("" + componentePatronDTO.getCodigoComponente());
		
		//Agrega el código de subcomponente.
		if (String.valueOf(componentePatronDTO.getCodigoSubcomponente()).length() < 2)
			codigoComponentePatronDTO = codigoComponentePatronDTO.concat("0" + componentePatronDTO.getCodigoSubcomponente());
		else
			codigoComponentePatronDTO = codigoComponentePatronDTO.concat("" + componentePatronDTO.getCodigoSubcomponente());
		
		//Comprobación del código de plano.
		if (String.valueOf(componentePatronDTO.getPlano()).length() < 2)
			codigoComponentePatronDTO = codigoComponentePatronDTO.concat("-0" + componentePatronDTO.getPlano());
		else
			codigoComponentePatronDTO = codigoComponentePatronDTO.concat("-" + componentePatronDTO.getPlano());
		
		return codigoComponentePatronDTO;
	}

	
	/**
	 * Método que rellena el código de producto para mostrarlo como corresponde en la pantalla: CCEEMMmm.
	 * Siendo C = número clase, E = número elemento, M = número material, m = número medida fija.
	 * @param ProductoDTO
	 * @return String con el código formateado de un producto para mostrar en pantalla.
	 */
	public static String rellenarCodigoProducto(ProductoDTO productoDTO) {
		
		String codigoProductoDTO;
		
		codigoProductoDTO = rellenarCodigo(productoDTO.getElemento().getClase().getCodigo());
		
		codigoProductoDTO = codigoProductoDTO + rellenarCodigo(productoDTO.getElemento().getCodigo());
		
		codigoProductoDTO = codigoProductoDTO + rellenarCodigo(productoDTO.getMaterial().getCodigo());
		
		codigoProductoDTO = codigoProductoDTO + rellenarCodigo(productoDTO.getMedidaFija().getCodigo());
		
		return codigoProductoDTO;
	}
	
	public static String equipoOComponente(String codigo) {
		
		String tipo;
		
		if(codigo.split("-")[2].equals("0000"))
			tipo = "EQUIPO";
		else
			tipo = "COMPONENTE";
		
		return tipo;
	}
}
